package com.atguigu.command;

/**
 * @Description: 命令模式
 * @Author lixiaolong
 * @Date 2023/10/10
 */
public class Client {

	/**
	 * 命令模式
	 * 1、发布者
	 * 2、接收者
	 * 3、命令接口
	 * 4、具体命令--绑定对应的的接收者，执行接收者的具体操作
	 * @param args
	 */
	public static void main(String[] args) {


		//使用命令模式完成 通过遥控器对电灯的操作

		// 命令接收者 电灯对象
		LightReceiver lightReceiver = new LightReceiver();

		// 电灯的 具体命令   将接收者与命令绑定
		LightOnCommand lightOnCommand = new LightOnCommand(lightReceiver);
		LightOffCommand lightOffCommand = new LightOffCommand(lightReceiver);

		// 命令发布者 遥控器
		RemoteController remoteController = new RemoteController();

		// 发送命令 no = 0 表示电灯的开、关命令
		remoteController.setCommand(0, lightOnCommand, lightOffCommand);

		System.out.println("--------开灯-----------");
		remoteController.onButtonWasPushed(0);
		System.out.println("--------关灯-----------");
		remoteController.offButtonWasPushed(0);
		System.out.println("--------撤销-----------");
		remoteController.undoButtonWasPushed();


		System.out.println("=========遥控器操作电视==========");

		TVReceiver tvReceiver = new TVReceiver();

		TVOffCommand tvOffCommand = new TVOffCommand(tvReceiver);
		TVOnCommand tvOnCommand = new TVOnCommand(tvReceiver);

		//no = 1 表示电视机的开、关命令
		remoteController.setCommand(1, tvOnCommand, tvOffCommand);

		System.out.println("--------开电视-----------");
		remoteController.onButtonWasPushed(1);
		System.out.println("--------关电视-----------");
		remoteController.offButtonWasPushed(1);
		System.out.println("--------撤销-----------");
		remoteController.undoButtonWasPushed();

	}

}
